package main

import (
	"io"
	"io/ioutil"
	"log"
	"os"
)

// ReadFileToString 使用ioutil.ReadFile 直接从文件读取到 []byte中
func ReadFileToString(fileName string) string {
	f, err := ioutil.ReadFile(fileName)
	if err != nil {
		log.Printf("读取文件失败:%#v", err)
		return ""
	}
	return string(f)
}

// WriteStringToFile 通过 io.WriteString 写入文件
func WriteStringToFile(fileName string, writeInfo string) {
	//_ = IfNoFileToCreate(fileName) //
	// O_RDWR:打开文件读写 O_APPEND:在写文件时追加数据  O_CREAT:如果不存在文件，创建一个新文件 O_TRUNC:在打开时截断常规可写文件。
	f, err := os.OpenFile(fileName, os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0766) // 打开文件
	defer f.Close()
	if err != nil {
		log.Printf("打开文件失败:%+v", err)
		return
	}
	// 将字符串写进文件
	if _, err = io.WriteString(f, writeInfo); err != nil {
		log.Printf("WriteStringToFile 写入文件失败:%+v", err)
		return
	}
	log.Printf("WriteStringToFile 写入文件成功")
}

// IsExists 判断所给路径文件/文件夹是否存在
func IsExists(path string) bool {
	_, err := os.Stat(path) //os.Stat获取文件信息
	if err != nil && !os.IsExist(err) {
		return false
	}
	return true
}

// IfNoFileToCreate 文件不存在就创建文件
func IfNoFileToCreate(fileName string) (file *os.File) {
	var f *os.File
	var err error
	if !IsExists(fileName) {
		f, err = os.Create(fileName)
		if err != nil {
			return
		}
		log.Printf("IfNoFileToCreate 函数成功创建文件:%s", fileName)
		defer f.Close()
	}
	return f
}
